import tables

count_cols = {
    'expno':   tables.Int32Col(dflt=-1),
    'runno':   tables.Int32Col(dflt=-1),
    'eventno': tables.Int32Col(dflt=-1),

    'npi0': tables.Int32Col(dflt=-1),
    'nplus': tables.Int32Col(dflt=-1),
    'nminus': tables.Int32Col(dflt=-1),
    'ngamma': tables.Int32Col(dflt=-1),

    'n_pi0pi0_combos': tables.Int32Col(dflt=-1),
    'n_pm_combos': tables.Int32Col(dflt=-1),

    'npi0_raw': tables.Int32Col(dflt=-1),
    'ncharged_raw': tables.Int32Col(dflt=-1),
    'ngamma_raw': tables.Int32Col(dflt=-1),

    'kept': tables.Int32Col(dflt=1),
}

m2pi0_cols = {'ntr': tables.Float32Col(),
              'npi0': tables.Float32Col(),
              'ngam': tables.Float32Col(),
              'expno': tables.Float32Col(),
              'runno': tables.Float32Col(),
              'evtno': tables.Float32Col(),
              'energy': tables.Float32Col(),
              'evtr2': tables.Float32Col(),
              'recm2pi': tables.Float32Col(),
              'm2pi': tables.Float32Col(),
              'recmpi1': tables.Float32Col(),
              'recmpi2': tables.Float32Col(),
              'npostr': tables.Float32Col(),
              'nnegtr': tables.Float32Col(),
              'mchrg': tables.Float32Col(),
              'npipi': tables.Float32Col(),
              'pxpi1': tables.Float32Col(),
              'pypi1': tables.Float32Col(),
              'pzpi1': tables.Float32Col(),
              'pxpi2': tables.Float32Col(),
              'pypi2': tables.Float32Col(),
              'pzpi2': tables.Float32Col(),
              'muid1': tables.Float32Col(),
              'muid2': tables.Float32Col(),
              'm2mu': tables.Float32Col(),
              'rcm2mup1': tables.Float32Col(),
              'rcm2mup2': tables.Float32Col(),
              'm2pi2mu': tables.Float32Col(),
              'recm2mu': tables.Float32Col(),
              }

gtntp_cols = {'recm2pi': tables.Float32Col(),
              'm2mu': tables.Float32Col(),
              'm2pi': tables.Float32Col(),
              'rcm2mup1': tables.Float32Col(),
              'rcm2mup2': tables.Float32Col(),
              'recmpi1': tables.Float32Col(),
              'recmpi2': tables.Float32Col(),
              'm2pi2mu': tables.Float32Col(),
              'energy': tables.Float32Col(),
              'ntr': tables.Float32Col(),
              'npi0': tables.Float32Col(),
              'recm2mu': tables.Float32Col(),
              }


pi0_cols = {
    'expno':   tables.Int32Col(dflt=-1),
    'runno':   tables.Int32Col(dflt=-1),
    'eventno': tables.Int32Col(dflt=-1),

    'trackno': tables.Int32Col(dflt=-1),

    'px':      tables.Float32Col(dflt=-1),
    'py':      tables.Float32Col(dflt=-1),
    'pz':      tables.Float32Col(dflt=-1),
    'energy':  tables.Float32Col(dflt=-1),

    'mass':    tables.Float32Col(dflt=-1),
    'chisq':   tables.Float32Col(dflt=-1),
    'g0energy': tables.Float32Col(dflt=-1),
    'g1energy': tables.Float32Col(dflt=-1),
    'g0e9oe25': tables.Float32Col(dflt=-1),
    'g1e9oe25': tables.Float32Col(dflt=-1),
    }
    

mumu_cols = {
    'expno':   tables.Int32Col(dflt=-1),
    'runno':   tables.Int32Col(dflt=-1),
    'eventno': tables.Int32Col(dflt=-1),

    'beam_e': tables.Float32Col(),
    
    'mup_muid_llh': tables.Float32Col(),
    'mup_pion_vs_kaon_llh': tables.Float32Col(),
    'mup_muon_vs_kaon_llh': tables.Float32Col(),
    'mup_muon_vs_electron_llh': tables.Float32Col(),
    
    'mum_muid_llh': tables.Float32Col(),
    'mum_pion_vs_kaon_llh': tables.Float32Col(),
    'mum_muon_vs_kaon_llh': tables.Float32Col(),
    'mum_muon_vs_electron_llh': tables.Float32Col(),    

    'mup_px': tables.Float32Col(),
    'mup_py': tables.Float32Col(),
    'mup_pz': tables.Float32Col(),
    'mup_e':  tables.Float32Col(),

    'mum_px': tables.Float32Col(),
    'mum_py': tables.Float32Col(),
    'mum_pz': tables.Float32Col(),
    'mum_e':  tables.Float32Col(),
    
    'm_mumu': tables.Float32Col(),
    'm_mumupi0pi0': tables.Float32Col(),
    'mbc_mumupi0pi0': tables.Float32Col(),
    'mm_off_mumu': tables.Float32Col(),
    'mumupi0pi0_idhash': tables.Int64Col(),
    'n_pm_combos': tables.Int32Col(),

    'p_total_cm': tables.Float32Col(),

    'r2': tables.Float32Col(),
    }

id_cols = {'pi01_id': tables.UInt32Col(),
           'pi01_g1id': tables.UInt32Col(),
           'pi01_g2id': tables.UInt32Col(),
           'pi02_id': tables.UInt32Col(),
           'pi02_g1id': tables.UInt32Col(),
           'pi02_g2id': tables.UInt32Col(),
           'mup_id': tables.UInt32Col(),
           'mum_id': tables.UInt32Col(),
           }

pi0pi0_cols = {
    'expno':   tables.Int32Col(),
    'runno':   tables.Int32Col(),
    'eventno': tables.Int32Col(),

#    'pi0pi0_combono': tables.Int32Col(),
#    'pm_combono': tables.Int32Col(),

    'best_chi2': tables.Int32Col(),
    'shares_photons': tables.Int32Col(),

    'gggg_idhash': tables.Int64Col(),
    
    'n_pi0pi0_combos': tables.Int32Col(),

    'beam_e': tables.Float32Col(),

    'pi01_px': tables.Float32Col(),
    'pi01_py': tables.Float32Col(),
    'pi01_pz': tables.Float32Col(),
    'pi01_e':  tables.Float32Col(),
    
    'pi02_px': tables.Float32Col(),
    'pi02_py': tables.Float32Col(),
    'pi02_pz': tables.Float32Col(),
    'pi02_e':  tables.Float32Col(),

    'pi01_m':    tables.Float32Col(),
    'pi01_chisq':   tables.Float32Col(),
    'pi01_g1e': tables.Float32Col(),
    'pi01_g2e': tables.Float32Col(),
    'pi01_g1e9oe25': tables.Float32Col(),
    'pi01_g2e9oe25': tables.Float32Col(),
    'pi01_g1theta_lab': tables.Float32Col(),
    'pi01_g2theta_lab': tables.Float32Col(),
    
    'pi02_m':    tables.Float32Col(),
    'pi02_chisq':   tables.Float32Col(),
    'pi02_g1e': tables.Float32Col(),
    'pi02_g2e': tables.Float32Col(),
    'pi02_g1e9oe25': tables.Float32Col(),
    'pi02_g2e9oe25': tables.Float32Col(),
    'pi02_g1theta_lab': tables.Float32Col(),
    'pi02_g2theta_lab': tables.Float32Col(),
    
    'missing_px': tables.Float32Col(),
    'missing_py': tables.Float32Col(),
    'missing_pz': tables.Float32Col(),
    'missing_e':  tables.Float32Col(),
    
    'm2_off_pi01': tables.Float32Col(),
    'm2_off_pi02': tables.Float32Col(),
    'mm_off_pi0pi0': tables.Float32Col(),
    'm_pi0pi0': tables.Float32Col(),

    'r2': tables.Float32Col(),
}

rowdefs = {}

rowdefs['count'] = count_cols
rowdefs['pi0'] = pi0_cols
rowdefs['mumu'] = mumu_cols
rowdefs['pi0pi0'] = pi0pi0_cols
rowdefs['gtntp'] = gtntp_cols
rowdefs['m2pi0'] = m2pi0_cols

rowdefs['mumupi0pi0'] = {}
rowdefs['mumupi0pi0'].update(pi0pi0_cols)
rowdefs['mumupi0pi0'].update(mumu_cols)






